using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace App.Modelo
{
    public class Formulario
    {

        private string nombre;
        private string descripcion;

        public Formulario() : base()
        {
        }

        public Formulario(string nombre)
            : base()
        {
            Nombre = nombre;
        }

        public Formulario(string nombre, string descripcion)
            : base()
        {
            Nombre = nombre;
            Descripcion = descripcion;
        }

        public static readonly Regex NombreValidator = new Regex("^\\w[\\w.]*$");

        public virtual Int32 Id { get; set; }

        public virtual String Nombre
        {
            get { return nombre; }
            set
            {
                if (!NombreValidator.IsMatch(value))
                    throw new Exception(
                        @"El Nombre del Formulario solo puede contener letras, numeros, guiones bajos y puntos");
                nombre = value;
            }
        }

        public virtual String Descripcion
        {
            get { return descripcion == null ? nombre : descripcion; }
            set { descripcion = value; }
        }

        public override string ToString()
        {
            return Nombre;
        }

        public override bool Equals(object obj)
        {
            if (obj is Formulario)
                return ((Formulario) obj).Id == Id;
            else
                return base.Equals(obj);
        }

        public override int GetHashCode()
        {
            return Id;
        }

        private IList<Funcion> _funciones;

        public virtual IList<Funcion> Funciones
        {
            get { return _funciones == null ? (_funciones = new List<Funcion>()) : _funciones; }
            set { _funciones = value; }
        }

    
    }
}